home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Explosion
/
Software Explosion (Fore-Matt Home Computing)(1996).iso
/
games
/
windows
/
hangman
/
hangman.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1996-01-17
|
6KB
|
234 lines
// CHangman.cpp
//
// Jasen N. Tenney
// 21 December 1995
//
// Functions for the CHangman class.
//
#include "stdafx.h"
#include "Hangman.h"
CHangman::CHangman()
{
// Do initialization here
m_CurrentDictionary.RemoveAll();
m_CurrentDictionary.SetSize( 7000, 2000); // Set initial size and grow by size
srand( (unsigned)time( NULL ) ); // Seed random number generator
m_NumValidGuesses = 10; // Set number of valid guesses
Reset();
}
CHangman::~CHangman()
{
}
void CHangman::LoadNewWord()
{
UINT Index;
Index = rand() % m_WordCount; // Get index of new word
m_CurrentWord = m_CurrentDictionary.GetAt(Index); // Load new word
m_CurrentGuess = InitCurrentGuess(); // Initialize current guess "_ _..."
m_GuessesRemaining = m_NumValidGuesses; // Reset guesses remaining
m_TotalGuesses = 0; // Total guesses so far
}
BOOL CHangman::CheckLetter(char Letter)
{
BOOL LetterAdded = FALSE;
int Size =0;
int Index =0;
Size = m_CurrentWord.GetLength(); // Get length of current word
for(Index=0; Index<Size; Index++) // Step through word to check
{
if( m_CurrentWord[Index] == Letter ) // If we hit a letter then
{
m_CurrentGuess.SetAt( (Index*2), Letter); // Set current guess to
LetterAdded = TRUE; // letter and change bool
}
}
if( LetterAdded == FALSE )
DecrementGuessRemain(); // If no letter added decrement guesses remaining
IncrementTotalGuesses(); // Increment total guesses so far
return( LetterAdded ); // Return TRUE/FALSE if letter added or not
}
UINT CHangman::GetGamesPlayed()
{
return( m_GamesPlayed ); // Return number of games played so far
}
UINT CHangman::GetGamesWon()
{
return( m_GamesWon ); // Return number of games won so far
}
UINT CHangman::GetPercentage()
{
if( m_GamesPlayed != 0 ) // Only do divide if games played not zero
m_Percentage = (UINT)(((float)m_GamesWon / (float)m_GamesPlayed) * 100);
return( m_Percentage ); // Return the percentage
}
CString CHangman::InitCurrentGuess()
{
int Index = 0;
CString Temp; // Use a temporary string
for(Index=0; Index < m_CurrentWord.GetLength(); Index++)
if( Index == ( m_CurrentWord.GetLength() - 1 ) )
Temp += "_"; // If last the just put "_" and not "_ "
else
Temp += "_ "; // Make string look like "_ _ _ _"
return( Temp ); // Return it to calling function
}
CString CHangman::GetCurrentGuess()
{
return( m_CurrentGuess ); // Return the current # of guesses so far
}
void CHangman::Reset()
{
m_GamesPlayed = 0; // Reset all variables to reflect new game
m_GamesWon = 0;
m_Percentage = 0;
}
UINT CHangman::GetGuessRemain()
{
return( m_GuessesRemaining ); // Return the # of guesses remaining
}
BOOL CHangman::CheckWordCompleted()
{
BOOL WordCompleted = TRUE;
int Size =0;
int Index =0;
Size = m_CurrentWord.GetLength(); // Get length of current word
for(Index=0; Index<Size; Index++)
{
if( m_CurrentWord[Index] != m_CurrentGuess.GetAt( Index*2 ) )
WordCompleted = FALSE; // If all letter do not match then not completed
}
return( WordCompleted ); // Return TRUE/FALSE if guess is completed or not
}
void CHangman::IncrementGamesWon()
{
m_GamesWon++; // Increment # of games won
}
void CHangman::IncrementGamesPlayed()
{
m_GamesPlayed++; // Increment # of games played
}
CString CHangman::GetHintLetter()
{
CString Letter;
int Size =0;
int Index =0;
Size = m_CurrentWord.GetLength();
for(Index=0; Index<Size; Index++)
if( m_CurrentGuess.GetAt( Index*2 ) == '_' )
{
Letter = m_CurrentWord.GetAt( Index ); // On first '_' return the
break; // letter that should be there
}
return( Letter );
}
void CHangman::DecrementGuessRemain()
{
if( m_GuessesRemaining > 0 ) // As long as guesses remaining is greater than
m_GuessesRemaining--; // zero you can subtract from it
}
CString CHangman::GetCurrentWord()
{
return( m_CurrentWord ); // Return current word
}
void CHangman::IncrementTotalGuesses()
{
m_TotalGuesses++; // Increment # of total guesses so far
}
UINT CHangman::GetTotalGuesses()
{
return( m_TotalGuesses ); // Return total guesses so far
}
BOOL CHangman::LoadDictionary()
{
CStdioFile f;
CFileException exception;
BOOL openStatus = FALSE;
BOOL fileStatus = TRUE;
char* pFileName = "hangman.dic";
UINT Index = 0;
// open file for reading
openStatus = f.Open(pFileName,
CFile::modeRead, &exception);
if (!openStatus)
{
CString strMsg;
char tmpStr[30];
_itoa( exception.m_cause, tmpStr, 10 );
strMsg = "Error opening data file. Code: ";
strMsg += tmpStr;
strMsg += ".";
MessageBox(NULL, strMsg, NULL, MB_ICONINFORMATION | MB_OK);
return( FALSE );
}
else
{
CString tmpStr;
do
{
try
{
fileStatus = f.ReadString(tmpStr);
if(fileStatus == TRUE)
{
m_CurrentDictionary.SetAt(Index,tmpStr);
Index++;
}
}
catch (CFileException exception)
{
CString strMsg;
char tmpStr[30];
_itoa( exception.m_cause, tmpStr, 10 );
strMsg = "Error reading data file. Code: ";
strMsg += tmpStr;
strMsg += ".";
MessageBox(NULL, strMsg, NULL, MB_ICONINFORMATION | MB_OK);
return( FALSE );
}
}
while (fileStatus == TRUE);
f.Close();
}
m_WordCount = Index;
return( TRUE );
}
void CHangman::LoadErrorDictionary()
{
UINT Index;
for(Index= 0; Index<100; Index++) // Upon error load dictionary to this
m_CurrentDictionary.SetAt(Index,"JASENNTENNEY");
m_WordCount=Index;
}